package com.leinao.category.dao;

import com.leinao.category.dto.CategoryDto;
import com.leinao.category.dto.CategoryRelationDto;
import com.leinao.category.model.Category;
import com.leinao.category.model.CategoryRelation;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 *
 * @Description 分类Dao
 * @author lizi
 * @date 2019/03/06 下午6:48
 * @Version 1.0
 */
@Repository
public interface CategoryMapper {

    /**
     * @Description 根据类型获取分类列表信息
     * @param type : 类型: 1-算法，2-数据集
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    List<CategoryDto> getCategoryList(@Param("type") Integer type);

    /**
     * @Description 保存分类信息
     * @param category : 分类信息
     * @author lizi
     * @date 2019/03/14 下午6:44
     */
    void insertCategory(Category category);

    /**
     * @Description 根据分类名称获取自定义分类信息
     * @param name : 分类名称
     * @author lizi
     * @date 2019/03/14 下午6:44
     */
    CategoryDto getCustomCategoryByName(@Param("name") String name);

    /**
     * @Description 根据主体ID和类型获取分类信息
     * @param objectId : 主体ID
     * @param type : 类型: 1-算法，2-数据集
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    List<CategoryRelationDto> getCategoryListByObjectIdAndType(@Param("objectId") Long objectId, @Param("type") Integer type);

    /**
     * @Description 根据主体ID和类型获取分类信息
     * @param objectIdList : 主体ID集合
     * @param type : 类型: 1-算法，2-数据集
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    List<CategoryRelationDto> getCategoryListByObjectIdListAndType(@Param("objectIdList") List<Long> objectIdList, @Param("type") Integer type);

    /**
     * @Description 根据主体ID和类型获取分类信息
     * @param categoryRelationId : 分类关联ID
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    CategoryRelation getCategoryRelation(@Param("categoryRelationId") Long categoryRelationId);

    /**
     * @Description 删除分类关联关系
     * @param categoryRelationId :  分类关联ID
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    void deleteCategoryRelation(@Param("categoryRelationId") Long categoryRelationId, @Param("time") Long time);

    /**
     * @Description 批量删除分类关联关系
     * @param categoryRelationIdList :  分类关联ID列表
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    void deleteCategoryRelationList(@Param("categoryRelationIdList") List<Long> categoryRelationIdList, @Param("time") Long time);

    /**
     * @Description 添加分类关联关系
     * @param categoryRelation :  分类关联信息
     * @author lizi
     * @date 2019/03/06 下午6:44
     */
    void insertCategoryRelation(CategoryRelation categoryRelation);

    /**
      * @Description 获取公开项目关联最多的5个标签
      * @param type 1:公开项目  2:数据集
      * @return     公开项目关联最多的5个标签
      * @author:    weiwei
      * @Date:  2019/3/14 11:31
      */
    List<CategoryDto> getTopFiveRelationCategory(@Param("type")Integer type);

    /**
      * @Description 获取公开项目和公开数据集关联的标签个数
      * @param type 1:公开项目  2:数据集
      * @return
      * @author:    weiwei
      * @Date:  2019/4/2 14:27
      */
    Long getCategoryCountByType(@Param("type")Integer type);

}